package com.caldremch.demo

/**
 * Created by Administrator on 2017/10/31.
 */
fun main(args: Array<String>){

    println("hello world");
    var x = sum(3,4);
    println(x);
    printSum(4,5)
    vars(3,3,3,3,3,3)
    //匿名函数, lambda
    var sumLambda: (Int,Int) -> Int = {x,y -> x+y}
    println(sumLambda(8,2))

    //define a int value
    var a:Int = 2;
    //auto recognize a1 as a int value
    var a1 = 2;
    //b cannot be reassigned
    val b = 2;

    //字符串模板
    //$表示一种引用方式, 在字符串中, 使用某一个值, 不需要进行拼接, 而是
    //使用$进行引用即可
    //同时,也可以包含函数调用返回值 例如 ${sum(1,2)}
    var s1 = "a = $a";
    var refStr = "${sum(2,3)}";
    println(s1)
    println(refStr)

    //区间表达式有具有操作符形式...的rangeTo函数辅以in和!in形成
    //默认步长是1,
    for (i in 1..8 step 2) print(i) // 1357
    for (i in 51..8 step 2) print(i) //什么都不输出
    for (i in 51 downTo 8 step 10) print(i)//51 41...
    //使用util函数排除结束函数
    for (i in 1 until 10) print(i)
    println()

    //比较两个数字  三个等号 === 表示比较对象地址(强相等)，两个 == 表示比较两个值大小(弱相等)。
    var aVale:Int = 2;
    print(aVale===aVale) //true
    val boxedA:Int = aVale;
    val boxedB:Int = aVale;
    print(boxedA == boxedB) //true
    print(boxedA === boxedB) //false

}

//有返回值, 返回值为Int
fun sum(a:Int , b: Int): Int{
    return a+b;
}
//Unit相当于void, 也可以省略
public fun printSum(a: Int, b: Int): Unit{
    println(a+b);
}

//可边长参数 vararg为关键字进行标示 函数
fun  vars(vararg  v:Int){
    for (vt in v){
        print(vt);
    }
    print("\n");
}

//定义常量和变量
/**
 * 可变变量定义:var关键字
 * var(标识符) : 类型 = <初始化值>
 *
 * 不可变变量定义:val关键字
 * val(标识符) : 类型 = <初始化值>
 *
 */

